LiveData এবং ViewModel ব্যবহার
LiveData এবং ViewModel হল Android Jetpack এর Architecture Components, যা Android অ্যাপ্লিকেশনে UI এবং ডেটা ম্যানেজমেন্টকে উন্নত এবং স্থিতিশীল করে। LiveData ডেটা পর্যবেক্ষণ করে এবং UI আপডেট করে, আর ViewModel UI রিলেটেড ডেটা সংরক্ষণ করে, যা অ্যাপ্লিকেশনের লাইফসাইকেল সচেতনভাবে ম্যানেজ করতে সাহায্য করে। এই কম্পোনেন্টগুলো ব্যবহার করে আপনি UI এবং ডেটা সংযোগকে আরও কার্যকরী এবং নিরাপদ করতে পারেন।
LiveData এবং ViewModel এর ভূমিকা
LiveData:
- LiveData হল একটি লাইফসাইকেল সচেতন observable ডেটা হোল্ডার ক্লাস, যা Activity বা Fragment এর লাইফসাইকেল পরিবর্তনের সাথে UI আপডেট করে।
- এটি ডেটা পরিবর্তনের পর UI কে স্বয়ংক্রিয়ভাবে আপডেট করে, যার ফলে কোড পরিষ্কার এবং পুনর্ব্যবহারযোগ্য হয়।
- LiveData লাইফসাইকেলের সচেতন হওয়ায় এটি মেমরি লিক রোধ করতে এবং অ্যাপ ক্র্যাশ প্রতিরোধ করতে সাহায্য করে।
ViewModel:
- ViewModel হল একটি ক্লাস, যা UI রিলেটেড ডেটা এবং ব্যবসায়িক লজিক সংরক্ষণ করে। এটি Activity বা Fragment এর লাইফসাইকেল পরিবর্তন হলেও ডেটা টিকে থাকে।
- ViewModel UI উপাদানগুলোর সাথে সরাসরি কাজ না করে, বরং LiveData এর মাধ্যমে ডেটা পাস করে। এটি লাইফসাইকেল সচেতন এবং Configuration Change (যেমন স্ক্রিন রোটেশন) হলেও ডেটা টিকে থাকে।
উদাহরণ: LiveData এবং ViewModel ব্যবহার করে Counter অ্যাপ তৈরি
নিচে একটি সিম্পল উদাহরণ দেওয়া হলো যেখানে LiveData এবং ViewModel ব্যবহার করে একটি Counter অ্যাপ তৈরি করা হয়েছে।
ধাপ ১: ViewModel ক্লাস তৈরি করা
প্রথমে একটি ViewModel ক্লাস তৈরি করুন, যা ডেটা সংরক্ষণ করবে এবং LiveData ব্যবহার করে ডেটা পর্যবেক্ষণ করবে।
CounterViewModel.java:
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class CounterViewModel extends ViewModel {
// MutableLiveData, যা পরিবর্তনশীল এবং অভ্যন্তরীণ ব্যবহারের জন্য
private final MutableLiveData<Integer> counter = new MutableLiveData<>();
// প্রাথমিক মান সেট করা
public CounterViewModel() {
counter.setValue(0);
}
// Counter আপডেট করার জন্য মেথড
public void incrementCounter() {
if (counter.getValue() != null) {
counter.setValue(counter.getValue() + 1);
}
}
// Counter ডেটা পর্যবেক্ষণের জন্য LiveData রিটার্ন করা
public LiveData<Integer> getCounter() {
return counter;
}
}
ধাপ ২: Activity তে ViewModel এবং LiveData ব্যবহার করা
ViewModel এবং LiveData ব্যবহার করে UI তে ডেটা আপডেট করতে Activity বা Fragment এ সেটআপ করুন।
MainActivity.java:
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
public class MainActivity extends AppCompatActivity {
private CounterViewModel counterViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView counterText = findViewById(R.id.counterText);
Button incrementButton = findViewById(R.id.incrementButton);
// ViewModel ইন্সট্যান্স প্রাপ্তি
counterViewModel = new ViewModelProvider(this).get(CounterViewModel.class);
// LiveData পর্যবেক্ষণ করা এবং UI আপডেট করা
counterViewModel.getCounter().observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer value) {
counterText.setText("Counter: " + value);
}
});
// বাটনে ক্লিক করে Counter বাড়ানো
incrementButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
counterViewModel.incrementCounter();
}
});
}
}
Layout (activity_main.xml):
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:gravity="center">
<TextView
android:id="@+id/counterText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Counter: 0"
android:textSize="24sp"/>
<Button
android:id="@+id/incrementButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Increment"/>
</LinearLayout>
কোডের ব্যাখ্যা:
- ViewModel ইন্সট্যান্স:
ViewModelProviderব্যবহার করে Activity এর জন্য একটি ViewModel ইন্সট্যান্স তৈরি করা হয়েছে। এটি লাইফসাইকেল সচেতন এবং Activity ধ্বংস বা পুনঃনির্মাণ হলে ডেটা টিকে থাকে। - LiveData পর্যবেক্ষণ:
getCounter()মেথড ব্যবহার করে LiveData পর্যবেক্ষণ করা হয়েছে এবং ডেটা পরিবর্তন হলে UI আপডেট করা হয়েছে। - Counter আপডেট করা: বাটনে ক্লিক করলে ViewModel এর মেথড
incrementCounter()কল করা হয়, যা ডেটা আপডেট করে এবং LiveData এর মাধ্যমে UI তে পরিবর্তন প্রদর্শন করে।
LiveData এবং ViewModel এর সুবিধা
| সুবিধা | বিস্তারিত |
|---|---|
| Lifecycle-Aware | LiveData এবং ViewModel লাইফসাইকেল ম্যানেজ করে, যা UI স্থায়িত্ব বাড়ায় এবং মেমরি লিক প্রতিরোধ করে। |
| Configuration Changes Support | ViewModel Configuration Change (যেমন স্ক্রিন রোটেশন) সাপোর্ট করে এবং ডেটা টিকে থাকে। |
| Observable Data | LiveData ডেটা আপডেট হলে স্বয়ংক্রিয়ভাবে UI কে আপডেট করে। |
| Decoupling of UI and Data | UI এবং ডেটার মধ্যে বিচ্ছিন্নতা তৈরি করে, যা কোড পরিষ্কার এবং পুনরায় ব্যবহারযোগ্য করে। |
Best Practices
- ViewModel এবং UI কম্পোনেন্ট বিচ্ছিন্ন রাখা: ViewModel শুধুমাত্র ডেটা এবং ব্যবসায়িক লজিক পরিচালনা করবে। UI সম্পর্কিত কাজ (যেমন Toast দেখানো) Activity বা Fragment এ করা উচিত।
- LiveData ব্যবহার করে UI আপডেট: LiveData ব্যবহার করে সরাসরি UI আপডেট না করে ViewModel থেকে ডেটা পাওয়া উচিত।
- Data Handling: ViewModel লাইফসাইকেল সচেতন হওয়ায় বড় ডেটা বা API কল পরিচালনা করার জন্য এটি ব্যবহার করা উচিত।
উপসংহার
LiveData এবং ViewModel Android অ্যাপ্লিকেশনে UI এবং ডেটা ম্যানেজমেন্টকে উন্নত করে। LiveData লাইফসাইকেল সচেতন এবং UI তে ডেটা আপডেট করে, আর ViewModel UI রিলেটেড ডেটা সংরক্ষণ করে এবং Configuration Change সাপোর্ট করে। এই দুটি কম্পোনেন্ট ব্যবহার করে অ্যাপ্লিকেশন আরও স্থিতিশীল, কার্যকরী, এবং সহজে ম্যানেজ করা যায়।
Read more